(function () {
	var editor = null;

	UM.registerWidget('formula', {
		tpl:
			'<link type="text/css" rel="stylesheet" href="<%=formula_url%>formula.css">' +
			'<div class="edui-formula-wrapper">' +
			'<ul class="edui-tab-nav"></ul>' +
			'<div class="edui-tab-content"></div>' +
			'</div>',

		sourceData: {
			formula: {
				common: [
					'{/}frac{ }{ }',
					'^{ }/_{ }',
					'x^{ }',
					'x_{ }',
					'x^{ }_{ }',
					'{/}bar{ }',
					'{/}sqrt{ }',
					'{/}nthroot{ }{ }',
					'{/}sum^{ }_{n=}',
					'{/}sum',
					'{/}log_{ }',
					'{/}ln',
					'{/}int_{ }^{ }',
					'{/}oint_{ }^{ }',
				],
				symbol: [
					'+',
					'-',
					'{/}pm',
					'{/}times',
					'{/}ast',
					'{/}div',
					'/',
					'{/}bigtriangleup',
					'=',
					'{/}ne',
					'{/}approx',
					'>',
					'<',
					'{/}ge',
					'{/}le',
					'{/}infty',
					'{/}cap',
					'{/}cup',
					'{/}because',
					'{/}therefore',
					'{/}subset',
					'{/}supset',
					'{/}subseteq',
					'{/}supseteq',
					'{/}nsubseteq',
					'{/}nsupseteq',
					'{/}in',
					'{/}ni',
					'{/}notin',
					'{/}mapsto',
					'{/}leftarrow',
					'{/}rightarrow',
					'{/}Leftarrow',
					'{/}Rightarrow',
					'{/}leftrightarrow',
					'{/}Leftrightarrow',
				],
				letter: [
					'{/}alpha',
					'{/}beta',
					'{/}gamma',
					'{/}delta',
					'{/}varepsilon',
					'{/}varphi',
					'{/}lambda',
					'{/}mu',
					'{/}rho',
					'{/}sigma',
					'{/}omega',
					'{/}Gamma',
					'{/}Delta',
					'{/}Theta',
					'{/}Lambda',
					'{/}Xi',
					'{/}Pi',
					'{/}Sigma',
					'{/}Upsilon',
					'{/}Phi',
					'{/}Psi',
					'{/}Omega',
				],
			},
		},
		initContent: function (_editor, $widget) {
			var me = this,
				formula = me.sourceData.formula,
				lang = _editor.getLang('formula').static,
				formulaUrl = UMEDITOR_CONFIG.UMEDITOR_HOME_URL + 'dialogs/formula/',
				options = $.extend({}, lang, { formula_url: formulaUrl }),
				$root = me.root();

			if (me.inited) {
				me.preventDefault();
				return;
			}
			me.inited = true;

			editor = _editor;
			me.$widget = $widget;

			$root.html($.parseTmpl(me.tpl, options));
			me.tabs = $.eduitab({ selector: '#edui-formula-tab-Jpanel' });

			/* ��ʼ��popup������ */
			var headHtml = [],
				xMax = 0,
				yMax = 0,
				$tabContent = me.root().find('.edui-tab-content');
			$.each(formula, function (k, v) {
				var contentHtml = [];
				$.each(v, function (i, f) {
					contentHtml.push(
						'<li class="edui-formula-latex-item" data-latex="' +
							f +
							'" style="background-position:-' +
							xMax * 30 +
							'px -' +
							yMax * 30 +
							'px"></li>'
					);
					if (++xMax >= 8) {
						++yMax;
						xMax = 0;
					}
				});
				yMax++;
				xMax = 0;
				$tabContent.append('<div class="edui-tab-pane"><ul>' + contentHtml.join('') + '</ul>');
				headHtml.push(
					'<li class="edui-tab-item"><a href="javascript:void(0);" class="edui-tab-text">' +
						lang['lang_tab_' + k] +
						'</a></li>'
				);
			});
			headHtml.push('<li class="edui-formula-clearboth"></li>');
			$root.find('.edui-tab-nav').html(headHtml.join(''));
			$root.find('.edui-tab-content').append('<div class="edui-formula-clearboth"></div>');

			/* ѡ�е�һ��tab */
			me.switchTab(0);
		},
		initEvent: function () {
			var me = this;

			//��ֹ�������ر�popup
			me.root().on('click', function (e) {
				return false;
			});

			//���tab�л��˵�
			me.root()
				.find('.edui-tab-nav')
				.delegate('.edui-tab-item', 'click', function (evt) {
					me.switchTab(this);
					return false;
				});

			//���ѡ�й�ʽ
			me.root()
				.find('.edui-tab-pane')
				.delegate('.edui-formula-latex-item', 'click', function (evt) {
					var $item = $(this),
						latex = $item.attr('data-latex') || '';

					if (latex) {
						me.insertLatex(latex.replace('{/}', '\\'));
					}
					me.$widget.edui().hide();
					return false;
				});
		},
		switchTab: function (index) {
			var me = this,
				$root = me.root(),
				index = $.isNumeric(index) ? index : $.inArray(index, $root.find('.edui-tab-nav .edui-tab-item'));

			$root.find('.edui-tab-nav .edui-tab-item').removeClass('edui-active').eq(index).addClass('edui-active');
			$root.find('.edui-tab-content .edui-tab-pane').removeClass('edui-active').eq(index).addClass('edui-active');

			/* �Զ����� */
			me.autoHeight(0);
		},
		autoHeight: function () {
			this.$widget.height(this.root() + 2);
		},
		insertLatex: function (latex) {
			editor.execCommand('formula', latex);
		},
		width: 350,
		height: 400,
	});
})();
